<?php
/*
Описание: Класс для работы с Базой данных. Содержит функции по работе с запросами.
Автор: Andrew Shapovalov
Созданно: 10.01.2009
Обновленно: 04.12.2009
*/
include_once("shav_errors_msg.php");		//Системные ошибки и сообщения

class SHAV_DB
{
	public $database = "";
	public $server = "localhost";
	public $user = "root";
	public $pass = "";
	public $tables = array();

	function db_connect($database = "", $server = "localhost", $user = "root", $pass = "")
	{
		$result = @mysql_connect($server, $user, $pass) or die("<b>".ERROR_DB_0001."</b>".mysql_error());
		mysql_query("SET NAMES utf8");

		if (!$result){
			return false;
		}

		if (!@mysql_select_db($database))
			return false;


		$tables = mysql_list_tables($database);
		$count = 0;

		while ($count < mysql_numrows($tables)) {
			$this->tables[] = mysql_tablename($tables,$count);
			$count++;
		}

		//$connect = $result;
		//$this->connect = true;
		$this->database = $database;
		$this->server = $server;
		$this->user = $user;
		$this->pass = $pass;

		return $result;
	}
//*********************************************************************************************************************************

	/*Выполняем запрос и возврачаем массив
	ПАРАМЕТРЫ:
		$query - Строка запроса

	РЕЗУЛЬТАТ:
		Массив содержащий данные вернутые запросом;
		false - если нет данных;
		Текст ошибки, если возникла ошибка.*/
	function get_results($query = "")
	{
		if(empty($query))
			return ERROR_DB_0002;

		$words = split(' ', $query);
		$type = $word[0];

		if($this->database)
		{
			//Получаем данные из БД и создаем массив
			$results = @mysql_query($query) or die("<br /><b>".ERROR_DB_0001."</b>".mysql_error());
			$mass_res = array();
			while ($row = @mysql_fetch_array($results, MYSQL_BOTH))
			{
				//echo $row.'<br />';
				array_push($mass_res, $row);
			}

			//создаем нормальный массив данных из БД
			$res = array();
			foreach($mass_res as $row)
			{
				$data = array();
				foreach($row as $key => $value)
				{
					if(!is_int($key))
						$data[$key] = $value;
				}
				$res[] = $data;
			}
			return $res;
		}
		return false;
	}

	/*Получаем переменную их базы*/
	function get_vars($query = "")
	{
		if(empty($query))
			return ERROR_DB_0002;

		$words = split(' ', $query);
		$type = $words[0];

		if($type != 'SELECT')
			return ERROR_DB_0003;


		if($this->database)
		{
			$results = @mysql_query($query) or die("<br /><b>".ERROR_DB_0001."</b>".mysql_error());
			$mass_res = array();
			while ($row = @mysql_fetch_array($results, MYSQL_BOTH))
			{

				array_push($mass_res, $row);
			}

			foreach($mass_res as $rec)
			{
				foreach($rec as $key => $value)
				{
					return $value;
				}
			}
		}
		return false;
	}

	/*Добавляет данные в БД при этом возвращает id добавленной записи
	ПАРАМЕПТРЫ:
		$sql - запрос на языке SQL;
		$id_field - имя id-поля, которое является ключем.

	РЕЗУЛЬТАТ:
		id зиписи в таблицы*/
	function insert_data($sql, $id_field = 'id')
	{
		if(empty($sql))
			return ERROR_DB_0002;

		$str = substr($sql, 0, 6);
		if($str != 'INSERT')
			return ERROR_DB_0004;

		//Получаем название таблицы из запроса.
		$words = split(' ', $sql);
		$table = $words[2];

		//Выполняем запрос на вставку
		$this->get_results($sql);

		//Получаем id новой записи из таблицы
		$res = $this->get_vars('SELECT '.$id_field.' FROM '.$table.' ORDER BY '.$id_field.' DESC LIMIT 0, 1');

		return $res;
	}

	/*Проводим авторизацию пользователя
	ПАРАМЕТРЫ:
		$login - имя пользователя;
		$passwodr - пароль пользователя;
		$params - Массив параметров вида: array('login_f' => 'login', 'password_f' => 'pass', 'crypt' => 'md5').*/
	function login($login, $password, $params = array('table' => 'users', 'login_f' => 'login', 'password_f' => 'pass', 'crypt' => 'md5'))
	{
		if($this->database)
		{
			@session_unset();
			@session_destroy();
			@session_start();

			$sql = 'SELECT * FROM '.$params['table'].' WHERE '.$params['login_f'].' = "'.$login.'" AND '.$params['password_f'].' = "'.$this->get_crypt($params['crypt'], $password).'"';
			//echo $sql;
			$results = $this->get_results($sql);

			foreach($results as $rec)
			{
				foreach($rec as $key => $value)
					if(is_string($key) && $key != '')
						$_SESSION[$key] = $value;
			}

//			return false;
		}
	}

	/*Проводим авторизацию пользователя
	ПАРАМЕТРЫ:
		$id_user - Идентификатор пользователя;
		$params = array('table' => 'users', 'id' => 'users_id') - массив с параметрами для получения.*/
	function relogin($id_user, $params = array('table' => 'users', 'id' => 'users_id'))
	{
		if($this->database)
		{
			@session_unset();
			@session_destroy();
			@session_start();

			$sql = 'SELECT * FROM '.$params['table'].' WHERE '.$params['id'].' = '.$id_user;
//			echo $sql;
			$results = $this->get_results($sql);

			foreach($results as $rec)
			{
				foreach($rec as $key => $value)
					if(is_string($key) && $key != '')
						$_SESSION[$key] = $value;
			}
		}
	}

	/*Осуществляем выход пользователя*/
	function quit()
	{
		@session_unset();
		@session_destroy();
	}

	/*Получаем зашифрованную строку из параметров
	ПАРАМЕТРЫ:
		$crypt - метод шифрования;
		$str - строка для шифрования
	РЕЗУЛЬТАТ:
		Зашифрованная строка.*/
	function get_crypt($crypt, $str = "")
	{
		switch($crypt)
		{
			case "md5":
				return md5($str);
				break;
		}
	}

	/*Создает хешь для пароля:
	ПАРАМЕТРЫ:
		$password - строка, которую следует хешировать;
		$type - метод хеширования.
	РЕЗУЛЬТАТ:
		Выводит строку, которая представляет хешь строки.*/
	function cryptPassword($password, $type = 'shav')
	{
		$hash = '';
		switch($type)
		{
			case "shav":
				$double_md5_hash = md5(md5($password)+$type);
				$hash = $double_md5_hash;

			default:
				$hash = $password;
				break;
		}

		return $hash;
	}

	/*Получить список всех таблиц в БД*/
	function get_all_tables()
	{
		if($this->database)
		{
			return $this->tables;
		}else{
			return '<br />'.ERROR_DB_0005;
		}
	}
}
?>
